iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
自我挑戰組

C++ AI 起步:編程進入智能世界系列 第 23

堆疊演算法:陣列實作堆疊

  • 分享至 

  • xImage
  •  

堆疊(Stack)是一種特殊的資料結構,它遵循LIFO(Last In, First Out)原則,意思是最後插入的元素將是第一個被取出的元素。堆疊有許多實際應用,例如在程式執行時保存變數和函式呼叫的內容、檢查語法括號是否匹配等。

基本概念
主要的操作包括:

  • Push:將一個元素添加到堆疊的頂部。
  • Pop:從堆疊的頂部刪除一個元素。
  • Top:查看堆疊頂部的元素但不刪除。
  • isEmpty:檢查堆疊是否為空。

C++中的陣列實作堆疊
以下是使用陣列實作堆疊的C++程式碼:

#include <iostream>
#include <stdexcept>

const int MAX_SIZE = 100; // 堆疊最大容量

class Stack {
private:
    int arr[MAX_SIZE];
    int top;

public:
    Stack() : top(-1) {}

    // 添加元素到堆疊
    void push(int value) {
        if (top >= MAX_SIZE - 1) {
            throw std::overflow_error("Stack overflow");
        }
        arr[++top] = value;
    }

    // 從堆疊刪除頂部元素
    int pop() {
        if (isEmpty()) {
            throw std::underflow_error("Stack underflow");
        }
        return arr[top--];
    }

    // 查看堆疊頂部的元素
    int peek() const {
        if (isEmpty()) {
            throw std::underflow_error("Stack is empty");
        }
        return arr[top];
    }

    // 檢查堆疊是否為空
    bool isEmpty() const {
        return top == -1;
    }
};

int main() {
    Stack s;
    s.push(5);
    s.push(10);
    s.push(15);
    std::cout << s.peek() << std::endl;  // 顯示 15
    s.pop();
    std::cout << s.peek() << std::endl;  // 顯示 10
    return 0;
}

陣列實作堆疊的優點和缺點
優點:

  • 隨機存取:陣列提供了O(1)的隨機存取時間,這意味著push和pop操作都是常數時間。
  • 空間效率:不需要額外的空間來存儲下一個節點的指針,如鏈結串列實作。

缺點:

  • 固定大小:在初始化時,必須指定堆疊的大小,這可能會導致空間浪費或堆疊溢出。
  • 不是動態的:與使用鏈結串列實作相比,堆疊大小不是動態的。

總結
雖然陣列實作堆疊有其優點和缺點,但對於許多應用來說,這是一個高效和直接的方法。然而,在某些情況下,可能需要動態大小的堆疊,這時鏈結串列實作可能更為合適。


上一篇
串列結構:環狀串列
下一篇
堆疊演算法:串列實作堆疊
系列文
C++ AI 起步:編程進入智能世界32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言